#ifndef LIGHT_INPUT_SYSTEM_H
#define LIGHT_INPUT_SYSTEM_H
#include "stdint.h"

#ifndef NULL
#define NULL ((void *)0)
#endif

#define foreach(i, n)       for(unsigned int i = 0; i < (n); ++i)
#define ARRAY_SIZE(a)       (sizeof(a) / sizeof(*a))

#define MESH_BUF_LEN   30   //mesh类数据buf大小

//设备类型
typedef enum
{
  INPUT_EVENT_TYPE_NONE,
  INPUT_EVENT_TYPE_KEY,
  INPUT_EVENT_TYPE_MESH,
  INPUT_EVENT_TYPE_UART,
}INPUT_EVENT_TYPE;

#pragma pack(1)

//mesh信息输入事件
typedef struct InputEvent {
  INPUT_EVENT_TYPE eType;          //设备类型
  uint8_t imesh[MESH_BUF_LEN];     //mesh类输入数据放在该区
}InputEvent, *PInputEvent;

//输入设备结构
typedef struct InputDevice {
  char *name;                             //设备名字
  int (*DeviceInit)(void);                //设备初始化
  struct InputDevice *pNext;              //链表，指向下一个设备
}InputDevice, *PInputDevice;

void AddInputDevices(void);
void InitInputDevices(void);
void InputDeviceRegister(PInputDevice ptInputDevice);

#endif
